package la.iok.hzsvn.lewin.movie.service;

import la.iok.hzsvn.lewin.movie.entity.MovieScene;
import la.iok.hzsvn.lewin.movie.entity.MovieSceneInstance;
import la.iok.hzsvn.lewin.movie.model.MovieSceneVo;
import la.iok.hzsvn.lewin.mybatis.service.BaseService;
import la.iok.hzsvn.share.annotations.NotNull;
import la.iok.hzsvn.share.annotations.NotNullElement;
import la.iok.hzsvn.share.annotations.NullElement;
import la.iok.hzsvn.share.annotations.Nullable;

import java.util.Collection;
import java.util.List;

public interface MovieSceneInstanceService extends BaseService<MovieSceneInstance,Long> {
    /**
     * 查找剧本中已经存在的剧幕文件实例。以便获取加密后的文件
     * @param movieId 剧本id
     * @param fileId 未加密的文件id
     * @return 如果找到返回对应的第一个实例,否则返回null
     */
    @Nullable
    MovieSceneInstance select(@NotNull Long movieId, @NotNull Long fileId);

    /**
     * 查询剧本实例中，对应剧幕的剧幕实例
     * @param movieInstanceId 剧本实例id
     * @param movieSceneId 剧幕id
     * @return 剧幕实例
     */
    @Nullable
    MovieSceneInstance movieScene(@Nullable Long movieInstanceId,@Nullable Long movieSceneId);

    /**
     * 保存剧幕实例
     * @param movieScene 剧幕
     * @param movieInstanceId 剧本实例id
     * @param encodedFileId 加密后的文件id
     * @return 新增加的剧幕实例id
     */
    @NotNull
    Long save(@NotNull MovieScene movieScene,@NotNull Long movieInstanceId,@NotNull Long encodedFileId);

    /**
     * 转换po集合为vo集合
     * @param pos po集合
     * @return vo集合
     */
    @NotNull
    @NotNullElement
    List<MovieSceneVo> po2vo(@NotNull @NotNullElement List<MovieSceneInstance> pos);

    /**
     * 标记删除
     * @param ids id集合
     */
    void markFileDeleted(@Nullable @NullElement Collection<Long> ids);
}
